// node 全局对象 global 默认可以直接使用的不用声明的对象 

// console.log(this); // 默认文件中的this 是被修改过的 

// 浏览器的this 是window 

// console.log(Object.keys(global));
// process 进程
// Buffer 缓存区 存储二进制， 16进制
// clearInterval
// clearTimeout
// setInterval
// setTimeout
// clearImmediate
// setImmediate node中

// node中的事件环 node 10以前和浏览器不一样 node 11 之后 表现形式一样

// (主模块)执行顺序是不一定的 看电脑性能
// setImmediate(() => {
//     console.log('setImmediate')
// })

// setTimeout(() => {
//     console.log('timeout')
// }, 0);

let fs = require('fs');

fs.readFile('./name.txt', function () {
    setImmediate(() => {
        console.log('setImmediate')
    })

    setTimeout(() => {
        console.log('timeout')
    }, 0);
})

// timers (setTimeout) poll 放的i/o操作如果没有check 会阻塞在着等定时器到达时间 check 如果有check 会在轮训完毕后立即执行

// 用来取代promise
Promise.resolve().then(data => {
    console.log(data);
})
process.nextTick(() => { // nextTick 是优先于 promise 微任务
    console.log('nextTick')
})

// node < 10

// 现在的版本就是清空 一个宏任务 就清空微任务 ，以前的版本是等待整个队列执行后在清空微任务